

import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可  *
     * 数字键按从小到大输出  * @param str string字符串 包含英文26个字母和@!./标点符号的字符串  * @return int整型二维数组
     */
    public static int[][] count(String str) { // write code here
        HashMap<String, int[]> map = new HashMap<>();
        map.put("@", new int[]{1, 1});
        map.put("!", new int[]{1, 2});
        map.put(".", new int[]{1, 3});
        map.put("/", new int[]{1, 4});
        map.put("a", new int[]{2, 1});
        map.put("b", new int[]{2, 2});
        map.put("c", new int[]{2, 3});
        map.put("d", new int[]{3, 1});
        map.put("e", new int[]{3, 2});
        map.put("f", new int[]{3, 3});
        map.put("g", new int[]{4, 1});
        map.put("h", new int[]{4, 2});
        map.put("i", new int[]{4, 3});
        map.put("j", new int[]{5, 1});
        map.put("k", new int[]{5, 2});
        map.put("l", new int[]{5, 3});
        map.put("m", new int[]{6, 1});
        map.put("n", new int[]{6, 2});
        map.put("o", new int[]{6, 3});
        map.put("p", new int[]{7, 1});
        map.put("q", new int[]{7, 2});
        map.put("r", new int[]{7, 3});
        map.put("s", new int[]{7, 4});
        map.put("t", new int[]{8, 1});
        map.put("u", new int[]{8, 2});
        map.put("v", new int[]{8, 3});
        map.put("w", new int[]{9, 1});
        map.put("x", new int[]{9, 2});
        map.put("y", new int[]{9, 3});
        map.put("z", new int[]{9, 4});
        int n = str.length();
        ArrayList<int[]> res = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String cur = str.charAt(i) + "";
            int[] key = map.get(cur);
            boolean flag = true;
            for (int j = 0; j < res.size(); j++) {
                if (res.get(j)[0] == key[0]) {
                    res.get(j)[1] += key[1];
                    System.out.println(res.get(j)[1]);
                    flag = false;
                    break;
                }
            }
            if (flag) {
                res.add(key);
            }
        }
        int[][] ans = new int[res.size()][];
        for (int i = 0; i < res.size(); i++) {
            ans[i] = res.get(i);
        }
        Arrays.sort(ans, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0] - o2[0];
            }
        });
        return ans;
    }

    public int[][] count1(String str) {
        // write code here
        if (str == null || str.length() == 0) {
            return new int[0][0];
        }
        int n = str.length();
        HashMap<Integer, Integer> map = new HashMap<>();
        char c;
        for (int i = 0; i < n; i++) {
            c = str.charAt(i);
            if (c == '@' || c == '!' || c == '.' || c == '/') {
                if (c == '@') {
                    map.put(1, map.getOrDefault(1, 0) + 1);
                } else if (c == '!') {
                    map.put(1, map.getOrDefault(1, 0) + 2);
                } else if (c == '.') {
                    map.put(1, map.getOrDefault(1, 0) + 3);
                } else if (c == '/') {
                    map.put(1, map.getOrDefault(1, 0) + 4);
                }
            }
            if (c == 'a' || c == 'b' || c == 'c') {
                if (c == 'a') {
                    map.put(2, map.getOrDefault(2, 0) + 1);
                } else if (c == 'b') {
                    map.put(2, map.getOrDefault(2, 0) + 2);
                } else if (c == 'c') {
                    map.put(2, map.getOrDefault(2, 0) + 3);
                }
            }
            if (c == 'd' || c == 'e' || c == 'f') {
                if (c == 'd') {
                    map.put(3, map.getOrDefault(3, 0) + 1);
                } else if (c == 'e') {
                    map.put(3, map.getOrDefault(3, 0) + 2);
                } else if (c == 'f') {
                    map.put(3, map.getOrDefault(3, 0) + 3);
                }
            }
            if (c == 'g' || c == 'h' || c == 'i') {
                if (c == 'g') {
                    map.put(4, map.getOrDefault(4, 0) + 1);
                } else if (c == 'h') {
                    map.put(4, map.getOrDefault(4, 0) + 2);
                } else if (c == 'i') {
                    map.put(4, map.getOrDefault(4, 0) + 3);
                }
            }
            if (c == 'j' || c == 'k' || c == 'l') {
                if (c == 'j') {
                    map.put(5, map.getOrDefault(5, 0) + 1);
                } else if (c == 'k') {
                    map.put(5, map.getOrDefault(5, 0) + 2);
                } else if (c == 'l') {
                    map.put(5, map.getOrDefault(5, 0) + 3);
                }
            }
            if (c == 'm' || c == 'n' || c == 'o') {
                if (c == 'm') {
                    map.put(6, map.getOrDefault(6, 0) + 1);
                } else if (c == 'n') {
                    map.put(6, map.getOrDefault(6, 0) + 2);
                } else if (c == 'o') {
                    map.put(6, map.getOrDefault(6, 0) + 3);
                }
            }
            if (c == 'p' || c == 'q' || c == 'r' || c == 's') {
                if (c == 'p') {
                    map.put(7, map.getOrDefault(7, 0) + 1);
                } else if (c == 'q') {
                    map.put(7, map.getOrDefault(7, 0) + 2);
                } else if (c == 'r') {
                    map.put(7, map.getOrDefault(7, 0) + 3);
                } else if (c == 's') {
                    map.put(7, map.getOrDefault(7, 0) + 4);
                }
            }
            if (c == 't' || c == 'u' || c == 'v') {
                if (c == 't') {
                    map.put(8, map.getOrDefault(8, 0) + 1);
                } else if (c == 'u') {
                    map.put(8, map.getOrDefault(8, 0) + 2);
                } else if (c == 'v') {
                    map.put(8, map.getOrDefault(8, 0) + 3);
                }
            }
            if (c == 'w' || c == 'x' || c == 'y' || c == 'z') {
                if (c == 'w') {
                    map.put(9, map.getOrDefault(9, 0) + 1);
                } else if (c == 'x') {
                    map.put(9, map.getOrDefault(9, 0) + 2);
                } else if (c == 'y') {
                    map.put(9, map.getOrDefault(9, 0) + 3);
                } else if (c == 'z') {
                    map.put(9, map.getOrDefault(9, 0) + 4);
                }
            }
        }
        int[][] ans = new int[map.keySet().size()][2];
        int idx = 0;
        for (int i = 0; i < 9; i++) {
            if (map.get(i + 1) != null) {
                ans[idx][0] = i + 1;
                ans[idx][1] = map.get(i + 1);
                idx++;
            }
        }
        return ans;
    }

    public int getMaxConsecutiveOnes(int[] arr, int n) {
        // write code here
        int left = 0;
        int count = 0;
        int max = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 1) {
                continue;
            } else if (arr[i] == 0 && count < n) {
                count++;
            } else {
                max = Math.max(max, (i - left));
                while (arr[left] != 0) {
                    left++;
                }
                left++;
            }
        }
        max = Math.max(max, arr.length - left);
        return max;
    }


}
